Published on

Nestjs 공식문서 부수기 [2]

NestJS의 공식문서를 보며 직접 따라해보고 배워보도록 하겠습니다. (NestJS, n.d.)

컨트롤러 [1]

컨트롤러는 들어오는 요청을 처리하고 클라이언트에 응답을 반환하는 역할을 합니다.

controllers

컨트롤러의 목적은 애플리케이션에 대한 특정 요청을 수신하는 것입니다. 라우팅 메커니즘 은 어떤 컨트롤러가 어떤 요청을 수신하는지 제어합니다. 종종 각 컨트롤러에는 둘 이상의 경로가 있으며 다른 경로는 다른 작업을 수행할 수 있습니다.

기본 컨트롤러를 만들기 위해 클래스와 데코레이터 를 사용 합니다. 데코레이터는 클래스를 필수 메타데이터와 연결하고 Nest가 라우팅 맵을 생성할 수 있도록 합니다

힌트 유효성 검사 가 내장 된 CRUD 컨트롤러를 빠르게 생성 하려면 CLI의 CRUD 생성기 를 사용할 수 있습니다 nest g resource [name].

라우팅

다음 예제에서는 기본 컨트롤러를 정의하는 데 필요한@Controller() 데코레이터를 사용합니다.

typescript
import { Controller, Get } from '@nestjs/common';

@Controller('cats')
export class CatsController {
  @Get()
  findAll(): string {
    return 'This action returns all cats';
  }
}

힌트 CLI를 사용하여 컨트롤러를 생성하려면 $ nest g controller cats명령을 실행하기만 하면 됩니다.

이렇게 하면 3000포트의 GET /cats요청을 이 핸들러(findAll())에 매핑하여 This action returns all cats가 출력됩니다.

@Get('profile')과 같이 수정하면 GET /customers/profile에 매핑됩니다.

요청 객체

핸들러는 종종 클라이언트 요청 세부 정보 에 액세스해야 합니다 . Nest는 기본 플랫폼의 요청 개체 에 대한 액세스를 제공합니다 (기본적으로 Express). @Req()처리기의 서명에 데코레이터를 추가하여 요청 개체를 삽입하도록 Nest에 지시하여 요청 개체에 액세스할 수 있습니다 .

ts
import { Controller, Get, Req } from '@nestjs/common';
import { Request } from 'express';

@Controller('cats')
export class CatsController {
  @Get()
  findAll(@Req() request: Request): string {
    return 'This action returns all cats';
  }
}

힌트 express타이핑 을 활용 하려면(위의 request: Request매개변수 예제에서와 같이) @types/express패키지를 설치하십시오.

요청 객체는 HTTP 요청을 나타내며 요청 쿼리 문자열, 매개변수, HTTP 헤더 및 본문에 대한 속성을 가지고 있습니다(자세한 내용은 여기 참조 ). 대부분의 경우 이러한 속성을 수동으로 가져올 필요가 없습니다. @Body()즉시 사용할 수 있는 또는 와 같은 전용 데코레이터를 대신 사용할 @Query()수 있습니다. 다음은 제공된 데코레이터와 이들이 나타내는 일반 플랫폼별 개체 목록입니다.

데코레이터일반 플랫폼 별 개체 목록
@Request(), @Req()req
@Response(), @Res()*res
@Next()next
@Session()req.session
@Param(key?: string)req.params/req.params[key]
@Body(key?: string)req.body/req.body[key]
@Query(key?: string)req.query/req.query[key]
@Headers(name?: string)req.headers/req.headers[name]
@Ip()req.ip
@HostParam()req.hosts

힌트 사용자 지정 데코레이터를 만드는 방법을 배우려면 여기를 방문하십시오.

리소스

POST 핸들러 를 생성해 보겠습니다 .

ts
import { Controller, Get, Post } from '@nestjs/common';

@Controller('cats')
export class CatsController {
  @Post()
  create(): string {
    return 'This action adds a new cat';
  }

  @Get()
  findAll(): string {
    return 'This action returns all cats';
  }
}

Nest는 모든 표준 HTTP 메소드에 대한 데코레이터를 제공합니다.

@Get(), @Post(), @Put(), @Delete(), @Patch(), @Options(), @Head(),@All()모든 것을 처리하는 요청을 정의합니다.

라우트 와일드카드

패턴 기반 경로도 지원됩니다. 예를 들어 별표는 와일드카드로 사용되며 모든 문자 조합과 일치합니다.

ts
@Get('ab*cd')
findAll() {
  return 'This route uses a wildcard';
}

'ab*cd'경로는, abcd, ab_cd, abecd 등과 일치합니다.

상태 코드

응답 상태 코드 는 201 인 POST 요청을 제외하고 기본적으로 항상 200 입니다. 핸들러 수준에서 데코레이터를 추가하여 이 동작을 쉽게 변경할 수 있습니다.

ts
import { HttpCode } from '@nestjs/common';

@Post()
@HttpCode(204)
create() {
  return 'This action adds a new cat';
}

헤더

ts
import { Header } from '@nestjs/common';

@Post()
@Header('Cache-Control', 'none')
create() {
  return 'This action adds a new cat';
}

리디렉션

url, statusCode 둘 다 선택 사항입니다.

statusCode를 생략하면 기본값 302 입니다

ts
@Get()
@Redirect('https://nestjs.com', 301)
ts
@Get('docs')
@Redirect('https://docs.nestjs.com', 302)
getDocs(@Query('version') version) {
  if (version && version === '5') {
    return { url: 'https://docs.nestjs.com/v5/' };
  }
}

이전 글

Nestjs 공식문서 부수기 [1]

다음 글

Nestjs 공식문서 부수기 [3]

NestJS. (n.d.). NestJS 공식문서. https://docs.nestjs.com